package br.senai.sc.controller.crud;

import java.io.Serializable;

import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.jboss.seam.international.status.Messages;

import br.senai.sc.controller.business.FotoBusiness;
import br.senai.sc.controller.exception.BusinessException;
import br.senai.sc.model.Foto;

/**
 * Contém serviços para CRUD de {@link Foto}.
 * 
 * @author Tiago Wanke Marques &lt;tiago.marques@sc.senai.br&gt;
 */
public class FotoCRUD implements Serializable {

	private static final long serialVersionUID = 1L;

	@PersistenceContext
	private EntityManager em;

	@Inject
	private Messages messages;

	@Inject
	private FotoBusiness fotoBusiness;

	/**
	 * Busca uma {@link Foto} por seu ID.
	 * 
	 * @param idFoto
	 * @return {@link Foto} encontrada ou nulo.
	 */
	public Foto find(Integer idFoto) {

		if (idFoto == null) {
			throw new IllegalArgumentException(
					"Passado identificador null para procurar Foto.");
		}

		return em.find(Foto.class, idFoto);
	}

	/**
	 * Remove uma {@link Foto} do banco.
	 * 
	 * @param foto
	 * @throws BusinessException
	 *             Lançada caso houver algum erro ao remover.
	 */
	public void remover(Foto foto) throws BusinessException {

		if (foto == null) {
			throw new IllegalArgumentException(
					"Passou null para remover condição climática.");
		}

		if (!fotoBusiness.podeRemover(foto)) {
			throw new BusinessException();
		}

		em.remove(em.merge(foto)); // merge garante que a entidade seja attached
	}

}
